// tool.js

// const shelljs = require("shelljs"); // 前端写shell
const fs = require("fs");
const path = require("path");

/**
 * 遍历文件夹，生成 真实文件对象树
 * @return { name: '文件夹名称', data: [ {...}, {...} ], path: '路径'}
 */
function readDirToObjTreeTool(foldPath) {
  //   let foldPath = shelljs.pwd().stdout; // 当前目录的绝对路径
  // let foldPath = "E:/code/doc/project/blogs/docs/navs/"; // 当前目录的绝对路径
  let objTree = [];

  function recursion(foldPath, data, isRootPath = true) {
    let files = fs.readdirSync(foldPath);

    // 1.目录循环
    files.forEach((item) => {
      // 如果有配置表，这里还需要进行配置过滤一下

      let isDir = fs.statSync(`${foldPath}/${item}`).isDirectory();

      // 判断逻辑：是文件，并且不是以 .开头的隐藏文件，并且不是 node_modules && build
      if (isDir && item !== "node_modules" && item !== "build") {
        data.push({
          name: item,
          isDir,
          data: [],
          path: `${foldPath}/${item}`,
        });
      } else if (!isRootPath) {
        if (item !== ".DS_Store") data.push(item);
      }
    });

    // 2.遍历目录循环（递归）
    data.length > 0 && data[0].name !== undefined
      ? data.forEach((item) => {
          if (item.path) recursion(item.path, item.data, false);
        })
      : "";
  }

  recursion(foldPath, objTree);

  return objTree;
}

/**
 * 生成导航栏
 * @param { Array } 文件对象树
 * @param { Object } 配置文件（全部）
 * @return { Array } 导航栏数组
 */
function createNavData(foldPath, config) {
  let navArr = [];
  let dirObjTree = readDirToObjTreeTool(foldPath); // 文件对象
  console.log(99, dirObjTree);

  for (let i = 0; i < dirObjTree.length; i++) {
    const item = dirObjTree[i];
    if (item === undefined) return;
    // console.log(item.data);
    // 1.生成导航
    //@ts-ignore
    navArr.push({
      // 导航栏文案（因为导航栏文件夹不能是中文的）
      // text: textTool(dirObjTree[i].name, config.navDataConfig),
      //@ts-ignore
      text: item.name,
      //@ts-ignore
      link: item.path,
      //@ts-ignore
      // children: item.data,
    });
  }

  return navArr;
}
//   获取一级导航栏
function getNav(foldPath) {
  let dirObjTree = readDirToObjTreeTool(foldPath); // 文件对象
  const list = [];
  for (let index = 0; index < dirObjTree.length; index++) {
    const item = dirObjTree[index] as { name: ""; data: []; path: [] };
    let itemPath = item.path;
    console.log(
      99,
      itemPath.substring(itemPath.indexOf("/docs"), itemPath.length)
    );
    // @ts-ignore
    itemPath = itemPath.substring(
      itemPath.indexOf("/docs"),
      itemPath.length
    );

    const obj = { text: "", children: [] };
    obj.text = item.name;
    if (item.data && item.data.length > 0) {
      for (let i = 0; i < item.data.length; i++) {
        const secondItem = item.data[i] as "";
        const text = secondItem.substring(0, secondItem.indexOf("."));
        const link = itemPath + "/" + text+'.html';
        console.log(88, text,link);
        // @ts-ignore
        obj.children.push({ text, link });
      }
    }
    // @ts-ignore
    list.push(obj);
  }
  console.log("打印行数82:", list);
  return list;
}
// 用于根据配置文件 生成到导航栏
function textTool(data, config) {
  if (config == null) return data;
  for (let i = 0; i < config.length; i++) {
    if (config[i][0] === data) return config[i][1];
  }
  return data;
}

module.exports = {
  getNav,
};
